#ifndef TRANSLATION_H
#define TRANSLATION_H

/*
 *  @autheur : LEMOUEL Florian
 *  @date : 12.04.2013
 *  @version 1.0 : création de la classe complète
 *  @version 1.1 : ajout de la sérialisation
 */

#include "transformation.h"
#include <QtOpenGL>

#include "boost/serialization/serialization.hpp"
#include <boost/serialization/export.hpp>

/*
 * Classe représentant une transformation de translation pour
 * un objet de la scène.
 */
class Translation : public Transformation
{
 //--------------------- Constructeurs et destructeur -------------------
public:
    //Constructeur par défault
    Translation();

    //Constructeur à 3 paramètres
    Translation(GLfloat tx, GLfloat ty, GLfloat tz);

    //Destructeur
    ~Translation();
    //----------------------------------------------------------------------
    //--------------------- Méthodes ---------------------------------------
public:

    //Méthode permettant d'utiliser la translation
    void utiliser();
    //----------------------------------------------------------------------
    //--------------------- Accesseurs -------------------------------------
public:

    //Mutateur de la composante en x de la translation
    void setTx(GLfloat tx);

    //Mutateur de la composante en y de la translation
    void setTy(GLfloat ty);

    //Mutateur de la composante en z de la translation
    void setTz(GLfloat tz);
    //----------------------------------------------------------------------
    //--------------------- Surcharge des opérateurs -----------------------

    //----------------------------------------------------------------------
    //--------------------- Attributs --------------------------------------
private:
    GLfloat _tx;
    GLfloat _ty;
    GLfloat _tz;
    //----------------------------------------------------------------------
    //--------------------- Sérialisation ----------------------------------
private:
    friend class boost::serialization::access;

    template<class Archive>
    void serialize(Archive & ar, const unsigned int version) {
            ar & BOOST_SERIALIZATION_BASE_OBJECT_NVP(Transformation);
            ar & _tx;
            ar & _ty;
            ar & _tz;
    }
   //----------------------------------------------------------------------
};

BOOST_CLASS_EXPORT(Translation);

#endif // TRANSLATION_H
